/// \file TextureDX11.h
/// \date 2012-12-08
/// \brief concrete class in DX11 that models a texture

#ifndef _TORUSPRORENDERING_RENDER_TEXTUREDX11_H__
#define _TORUSPRORENDERING_RENDER_TEXTUREDX11_H__

// DX11
#include <d3d11.h>

#include <Render/Include/Texture.h>
namespace Render
{

/// \brief concrete class in DX11 that models a texture
class TextureDX11 : public Texture
{
    /// \brief RendererDx11 is the only one that can create, destroy and use this class 
    friend class RendererDX11;

private:
    // ========== INTERNAL METHODS ========== //
    
    /// \brief Constructor, receives the texture info already created
    TextureDX11(ID3D11Texture2D* textura2D, D3D11_TEXTURE2D_DESC textura2D_description, ID3D11ShaderResourceView* shader_resource_view);
    
    /// \brief Destructor, releases the texture
    virtual ~TextureDX11(void);

    ID3D11ShaderResourceView* getD3D11ShaderResourceView();
    
    // ========== ATTRIBUTES ========== //
    ID3D11Texture2D * textura2D; 
    D3D11_TEXTURE2D_DESC textura2D_description;
    ID3D11ShaderResourceView* shader_resource_view;
};
};
#endif // _TORUSPRORENDERING_RENDER_TEXTUREDX11_H__
